package com.party.core.service.member.impl;

import com.google.common.base.Strings;
import com.party.common.paging.Page;
import com.party.core.dao.read.member.MemberGroupInfoReadDao;
import com.party.core.dao.write.member.MemberGroupInfoWriteDao;
import com.party.core.model.BaseModel;
import com.party.core.model.member.Member;
import com.party.core.model.member.MemberGroupInfo;
import com.party.core.model.member.PartnerInfoDetails;
import com.party.core.service.member.IMemberGroupInfoService;
import com.sun.istack.NotNull;
import org.apache.commons.collections.map.HashedMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;

import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**组织机构信息服务实现
 * party
 * Created by hauang wu ming
 * on 2018/2/6.
 */
@Service
public class MemberGroupInfoService implements IMemberGroupInfoService {
    @Autowired MemberGroupInfoReadDao memberGroupInfoReadDao;
    @Autowired MemberGroupInfoWriteDao memberGroupInfoWriteDao;
    /**
     * 插入组织机构信息
     * @param memberGroupInfo 组织机构信息
     * @return 插入结果（true/false）
     */
    @Override
    public String insert(MemberGroupInfo memberGroupInfo) {
        BaseModel.preInsert(memberGroupInfo);
        boolean result = memberGroupInfoWriteDao.insert(memberGroupInfo);
        if (result){
            return memberGroupInfo.getId();
        }
        return null;
    }
    /**
     * 更新组织机构信息
     * @param memberGroupInfo 组织机构信息
     * @return 更新结果（true/false）
     */
    @Override
    public boolean update(MemberGroupInfo memberGroupInfo) {
        if (memberGroupInfo.getUpdateDate() != null){
            memberGroupInfo.setUpdateDate(new Date());
        }

        return memberGroupInfoWriteDao.update(memberGroupInfo);
    }
    /**
     * 逻辑删除组织机构信息
     * @param id  组织机构主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean deleteLogic(@NotNull String id) {
        if(Strings.isNullOrEmpty(id)) {
            return false;
        }
        return memberGroupInfoWriteDao.deleteLogic(id);
    }
    /**
     * 物理删除组织机构信息
     * @param id 组织机构主键
     * @return 删除结果（true/false）
     */
    @Override
    public boolean delete(@NotNull String id) {
        if(Strings.isNullOrEmpty(id)) {
            return false;
        }
        return memberGroupInfoWriteDao.delete(id);
    }

    /**
     * 批量逻辑删除组织机构信息
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDeleteLogic(@NotNull Set<String> ids) {
        if(CollectionUtils.isEmpty(ids)) {
            return false;
        }
        return memberGroupInfoWriteDao.batchDeleteLogic(ids);
    }
    /**
     * 批量物理删除组织机构信息
     * @param ids 主键集合
     * @return 删除结果（true/false）
     */
    @Override
    public boolean batchDelete(@NotNull Set<String> ids) {
        if(CollectionUtils.isEmpty(ids)) {
            return false;
        }
        return memberGroupInfoWriteDao.batchDelete(ids);
    }
    /**
     * 根据主键获取组织机构信息
     * @param id 主键
     * @return 组织机构信息
     */
    @Override
    public MemberGroupInfo get(String id) {
        return memberGroupInfoReadDao.get(id);
    }
    /**
     * 分页查询组织机构列表
     * @param memberGroupInfo 组织机构信息
     * @param page 分页信息
     * @return 组织机构列表
     */
    @Override
    public List<MemberGroupInfo> listPage(MemberGroupInfo memberGroupInfo, Page page) {
        return memberGroupInfoReadDao.listPage(memberGroupInfo,page);
    }
    /**
     * 查询所有组织机构信息
     * @param memberGroupInfo 组织机构信息
     * @return 组织机构列表
     */
    @Override
    public List<MemberGroupInfo> list(MemberGroupInfo memberGroupInfo) {
        return memberGroupInfoReadDao.listPage(memberGroupInfo,null);
    }
    /**
     * 批量查询组织机构信息
     * @param ids 主键集合
     * @param memberGroupInfo 组织机构信息
     * @param page 分页信息
     * @return 组织机构列表
     */
    @Override
    public List<MemberGroupInfo> batchList(@NotNull Set<String> ids, MemberGroupInfo memberGroupInfo, Page page) {
       if(CollectionUtils.isEmpty(ids)){
           return Collections.EMPTY_LIST;
       }
        return memberGroupInfoReadDao.batchList(ids,new HashedMap(),page);
    }

    /**
     * @Description:通过memeberId查询
     * @Param: [memberId]
     * @return: com.party.core.model.member.MemberGroupInfo
     * @Author: Hua Qunhao
     * @Date: 2018/12/19
     */
    @Override
    public MemberGroupInfo findByMemberId(String memberId) {
        return memberGroupInfoReadDao.findByMemberId(memberId);
    }

    /**
     * 初始化MemberGroupInfo数据
     * @return
     */
    @Override
    public List<Member> getMemberId() {
        return memberGroupInfoReadDao.getMemberId();
    }

    /**
     * @Description:通过memberId获取合作商详细信息
     * @Param: [member]
     * @return: com.party.core.model.member.PartnerInfoOutput
     * @Author: Hua Qunhao
     * @Date: 2019-02-26-0026
     */
    @Override
    public PartnerInfoDetails getPartnerInfoByMemberId(Member member) {
        return memberGroupInfoReadDao.getPartnerInfoByMemberId(member);
    }
}
